char fbxshader_frag[] = "#version 450\n"
                        "#pragma import_defines ( VSG_NORMAL, VSG_COLOR, VSG_TEXCOORD0, VSG_LIGHTING, VSG_MATERIAL, VSG_DIFFUSE_MAP, VSG_OPACITY_MAP, VSG_AMBIENT_MAP, VSG_NORMAL_MAP, VSG_SPECULAR_MAP )\n"
                        "#extension GL_ARB_separate_shader_objects : enable\n"
                        "#ifdef VSG_DIFFUSE_MAP\n"
                        "layout(binding = 0) uniform sampler2D diffuseMap;\n"
                        "#endif\n"
                        "#ifdef VSG_OPACITY_MAP\n"
                        "layout(binding = 1) uniform sampler2D opacityMap;\n"
                        "#endif\n"
                        "#ifdef VSG_AMBIENT_MAP\n"
                        "layout(binding = 4) uniform sampler2D ambientMap;\n"
                        "#endif\n"
                        "#ifdef VSG_NORMAL_MAP\n"
                        "layout(binding = 5) uniform sampler2D normalMap;\n"
                        "#endif\n"
                        "#ifdef VSG_SPECULAR_MAP\n"
                        "layout(binding = 6) uniform sampler2D specularMap;\n"
                        "#endif\n"
                        "\n"
                        "#ifdef VSG_MATERIAL\n"
                        "layout(binding = 10) uniform MaterialData\n"
                        "{\n"
                        "    vec4 ambientColor;\n"
                        "    vec4 diffuseColor;\n"
                        "    vec4 specularColor;\n"
                        "    float shininess;\n"
                        "} material;\n"
                        "#endif\n"
                        "\n"
                        "#ifdef VSG_NORMAL\n"
                        "layout(location = 1) in vec3 normalDir;\n"
                        "#endif\n"
                        "#ifdef VSG_COLOR\n"
                        "layout(location = 3) in vec4 vertColor;\n"
                        "#endif\n"
                        "#ifdef VSG_TEXCOORD0\n"
                        "layout(location = 4) in vec2 texCoord0;\n"
                        "#endif\n"
                        "#ifdef VSG_LIGHTING\n"
                        "layout(location = 5) in vec3 viewDir;\n"
                        "layout(location = 6) in vec3 lightDir;\n"
                        "#endif\n"
                        "layout(location = 0) out vec4 outColor;\n"
                        "\n"
                        "void main()\n"
                        "{\n"
                        "#ifdef VSG_DIFFUSE_MAP\n"
                        "    vec4 base = texture(diffuseMap, texCoord0.st);\n"
                        "#else\n"
                        "    vec4 base = vec4(1.0,1.0,1.0,1.0);\n"
                        "#endif\n"
                        "#ifdef VSG_COLOR\n"
                        "    base = base * vertColor;\n"
                        "#endif\n"
                        "#ifdef VSG_MATERIAL\n"
                        "    vec3 ambientColor = material.ambientColor.rgb;\n"
                        "    vec3 diffuseColor = material.diffuseColor.rgb;\n"
                        "    vec3 specularColor = material.specularColor.rgb;\n"
                        "    float shininess = material.shininess;\n"
                        "#else\n"
                        "    vec3 ambientColor = vec3(0.1,0.1,0.1);\n"
                        "    vec3 diffuseColor = vec3(1.0,1.0,1.0);\n"
                        "    vec3 specularColor = vec3(0.3,0.3,0.3);\n"
                        "    float shininess = 16.0;\n"
                        "#endif\n"
                        "#ifdef VSG_AMBIENT_MAP\n"
                        "    ambientColor *= texture(ambientMap, texCoord0.st).r;\n"
                        "#endif\n"
                        "#ifdef VSG_SPECULAR_MAP\n"
                        "    specularColor = texture(specularMap, texCoord0.st).rrr;\n"
                        "#endif\n"
                        "#ifdef VSG_LIGHTING\n"
                        "#ifdef VSG_NORMAL_MAP\n"
                        "    vec3 nDir = texture(normalMap, texCoord0.st).xyz*2.0 - 1.0;\n"
                        "    nDir.g = -nDir.g;\n"
                        "#else\n"
                        "    vec3 nDir = normalDir;\n"
                        "#endif\n"
                        "    vec3 nd = normalize(nDir);\n"
                        "    vec3 ld = normalize(lightDir);\n"
                        "    vec3 vd = normalize(viewDir);\n"
                        "    vec4 color = vec4(0.01, 0.01, 0.01, 1.0);\n"
                        "    color.rgb += ambientColor;\n"
                        "    float diff = max(dot(ld, nd), 0.0);\n"
                        "    color.rgb += diffuseColor * diff;\n"
                        "    color *= base;\n"
                        "    if (diff > 0.0)\n"
                        "    {\n"
                        "        vec3 halfDir = normalize(ld + vd);\n"
                        "        color.rgb += base.a * specularColor *\n"
                        "            pow(max(dot(halfDir, nd), 0.0), shininess);\n"
                        "    }\n"
                        "#else\n"
                        "    vec4 color = base;\n"
                        "    color.rgb *= diffuseColor;\n"
                        "#endif\n"
                        "    outColor = color;\n"
                        "#ifdef VSG_OPACITY_MAP\n"
                        "    outColor.a *= texture(opacityMap, texCoord0.st).r;\n"
                        "#endif\n"
                        "    if (outColor.a==0.0) discard;\n"
                        "}\n"
                        "\n";
